package org.fatewa.engine.design.hooks;

import org.springframework.context.ApplicationContext;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

/**
 * 包含 Entrypoint 的所有行为前后钩子
 *
 * @author 4everlynn
 */
public interface EndpointHooks {
    /**
     * 入口点创建之前触发
     *
     * @param context Spring 的上下文
     */
    default void beforeCreate(ApplicationContext context) {
    }

    /**
     * 入口点创建之后触发
     *
     * @param context Spring 的上下文
     */
    default void created(ApplicationContext context) {
    }

    /**
     * 动态接口创建之前触发
     *
     * @param mappingHandlerMapping 请求映射处理器
     * @param context               Spring 的上下文
     */
    default void beforeExport(RequestMappingHandlerMapping mappingHandlerMapping, ApplicationContext context) {
    }

    /**
     * 指定是否异步执行 Hook
     *
     * @return 是否异步执行 Hook
     */
    default boolean async() {
        return false;
    }
}
